#ifndef SC_CCI_COMMANDS_H
#define SC_CCI_COMMANDS_H

/** the initialization string that has to be sent directly after connectiong to the server */
#define SC_CCI_INITSTRING "SAM CCI Plain\n"

/** the prefix for all Client Control Interface functions */
#define SC_CCI_PREFIX     "ScCci"

/** The maximum length a command line may have including line feed and string-termination */
#define SC_CCI_MAX_COMMANDLENGTH 500


// the command defines ==================================================================

// test the connection, SAMLight will answer with a message box containing the string
// sent with this call
#define SC_CCI_CMD_TEST                          SC_CCI_PREFIX"Test(\"%s\")\n"

// returns the version number of the interface
#define SC_CCI_CMD_GET_INTERFACE_VERSION         SC_CCI_PREFIX"GetInterfaceVersion()\n"

// shuts down SAMLight, afterwards the network connection is closed
#define SC_CCI_CMD_SHUTDOWN                      SC_CCI_PREFIX"Shutdown()\n"

// loads a new job
#define SC_CCI_CMD_LOAD_JOB                      SC_CCI_PREFIX"LoadJob(\"%s\", %d, %d, %d)\n"

// saves the current job
#define SC_CCI_CMD_SAVE_JOB                      SC_CCI_PREFIX"SaveJob(\"%s\", %d)\n"

// clear the current job
#define SC_CCI_CMD_NEW_JOB                       SC_CCI_PREFIX"NewJob()\n"

// reset the current sequence
#define SC_CCI_CMD_RESET_SEQUENCE                SC_CCI_PREFIX"ResetSequence()\n"

// let the view fit to the working area
#define SC_CCI_CMD_FIT_VIEW_TO_WORKING_AREA      SC_CCI_PREFIX"FitViewToWorkingArea()\n"

// let the view fit to all entities
#define SC_CCI_CMD_FIT_VIEW_TO_ENTITIES          SC_CCI_PREFIX"FitViewToEntities()\n"

// let the view fit to all selected entities
#define SC_CCI_CMD_FIT_VIEW_TO_SELECTED_ENTITIES SC_CCI_PREFIX"FitViewToSelectedEntities()\n"

// reset the quantity counter
#define SC_CCI_CMD_RESET_COUNTER                 SC_CCI_PREFIX"ResetCounter()\n"

// resplit a splitted job
#define SC_CCI_CMD_RESPLIT_JOB                   SC_CCI_PREFIX"ResplitJob()\n"

// reset the serial numbers
#define SC_CCI_CMD_RESET_SERIAL_NUMBERS          SC_CCI_PREFIX"ResetSerialNumbers()\n"

// increment the serial numbers
#define SC_CCI_CMD_INC_SERIAL_NUMBERS          SC_CCI_PREFIX"IncSerialNumbers()\n"

// decrement the serial numbers
#define SC_CCI_CMD_DEC_SERIAL_NUMBERS          SC_CCI_PREFIX"DecSerialNumbers()\n"

// update the position of the scanner
#define SC_CCI_CMD_UPDATE_SCANNER_POS            SC_CCI_PREFIX"UpdateScannerPos()\n"

// imports a vector graphic / 3d mesh
#define SC_CCI_CMD_IMPORT                        SC_CCI_PREFIX"Import(\"%s\", \"%s\", \"%s\", %f, %d)\n"

// change the displayed text of a text entity
#define SC_CCI_CMD_CHANGE_TEXT_BY_NAME           SC_CCI_PREFIX"ChangeTextByName(\"%s\", \"%s\")\n"

// get one single outline value of an entity
#define SC_CCI_CMD_GET_ENTITY_OUTLINE            SC_CCI_PREFIX"GetEntityOutline(\"%s\", %d)\n"

// scale an entity
#define SC_CCI_CMD_SCALE_ENTITY                  SC_CCI_PREFIX"ScaleEntity(\"%s\", %f, %f, %f)\n"

// translate an entity
#define SC_CCI_CMD_TRANSLATE_ENTITY              SC_CCI_PREFIX"TranslateEntity(\"%s\", %f, %f, %f)\n"

// rotate an entity
#define SC_CCI_CMD_ROTATE_ENTITY                 SC_CCI_PREFIX"RotateEntity(\"%s\", %f, %f, %f)\n"

// set a specific long data value for an entity
#define SC_CCI_CMD_SET_ENTITY_LONG_DATA          SC_CCI_PREFIX"SetEntityLongData(\"%s\", %d, %d)\n"

// get a long data alue that is set for an entity
#define SC_CCI_CMD_GET_ENTITY_LONG_DATA          SC_CCI_PREFIX"GetEntityLongData(\"%s\", %d)\n"

// delete an entity out of the job
#define SC_CCI_CMD_DELETE_ENTITY                 SC_CCI_PREFIX"DeleteEntity(\"%s\")\n"

// get the current mark flags
#define SC_CCI_CMD_GET_MARK_FLAGS                SC_CCI_PREFIX"GetMarkFlags()\n"

// set mark flags
#define SC_CCI_CMD_SET_MARK_FLAGS                SC_CCI_PREFIX"SetMarkFlags(%d)\n"

// translate the complete optical matrix
#define SC_CCI_CMD_OPTIC_MATRIX_TRANSLATE        SC_CCI_PREFIX"OpticMatrixTranslate(%f, %f, %f)\n"

// translate the complete optical matrix
#define SC_CCI_CMD_OPTIC_MATRIX_ROTATE           SC_CCI_PREFIX"OpticMatrixRotate(%f, %f, %f)\n"

// reset the complete optical matrix to its default values
#define SC_CCI_CMD_OPTIC_MATRIX_RESET            SC_CCI_PREFIX"OpticMatrixReset()\n"

// get a value of the optical matrix
#define SC_CCI_CMD_GET_OPTIC_MATRIX              SC_CCI_PREFIX"GetOpticMatrix(%d)\n"

// get a value of the optical matrix
#define SC_CCI_CMD_GET_WORKING_AREA              SC_CCI_PREFIX"GetWorkingArea(%d)\n"

// get a value of the optical matrix
#define SC_CCI_CMD_SHOW_APP                      SC_CCI_PREFIX"ShowApp(%d)\n"

// set the number of the head to be used
#define SC_CCI_CMD_SET_HEAD                      SC_CCI_PREFIX"SetHead(%d)\n"

// get the number of the currently used head
#define SC_CCI_CMD_GET_HEAD                      SC_CCI_PREFIX"GetHead()\n"

// mark a specific entity only
#define SC_CCI_CMD_MARK_ENTITY_BY_NAME           SC_CCI_PREFIX"MarkEntityByName(\"%s\", %d)\n"

// stop the running marking process
#define SC_CCI_CMD_STOP_MARKING                  SC_CCI_PREFIX"StopMarking()\n"

// check if there is marking in process
#define SC_CCI_CMD_IS_MARKING                    SC_CCI_PREFIX"IsMarking()\n"

// turn the laser on or off
#define SC_CCI_CMD_SWITCH_LASER                  SC_CCI_PREFIX"SwitchLaser(%d)\n"

// move to an absolute position
#define SC_CCI_CMD_MOVE_ABS                      SC_CCI_PREFIX"MoveAbs(%f, %f, %f)\n"

// set a pen
#define SC_CCI_CMD_SET_PEN                       SC_CCI_PREFIX"SetPen(%d)\n"

// get the current pen
#define SC_CCI_CMD_GET_PEN                       SC_CCI_PREFIX"GetPen()\n"

// set an double data value for an entity
#define SC_CCI_CMD_SET_ENTITY_DOUBLE_DATA        SC_CCI_PREFIX"SetEntityDoubleData(\"%s\", %d, %f)\n"

// get an double data value for an entity
#define SC_CCI_CMD_GET_ENTITY_DOUBLE_DATA        SC_CCI_PREFIX"GetEntityDoubleData(\"%s\", %d)\n"

// set a string data value for an entity
#define SC_CCI_CMD_SET_ENTITY_STRING_DATA        SC_CCI_PREFIX"SetEntityStringData(\"%s\", %d, \"%s\")\n"

// get a string data value for an entity
#define SC_CCI_CMD_GET_ENTITY_STRING_DATA        SC_CCI_PREFIX"GetEntityStringData(\"%s\", %d)\n"

// set a specific double value
#define SC_CCI_CMD_SET_DOUBLE_VALUE              SC_CCI_PREFIX"SetDoubleValue(%d, %f)\n"

// get a specific double value
#define SC_CCI_CMD_GET_DOUBLE_VALUE              SC_CCI_PREFIX"GetDoubleValue(%d)\n"

// set a specific long value
#define SC_CCI_CMD_SET_LONG_VALUE                SC_CCI_PREFIX"SetLongValue(%d, %d)\n"

// get a specific long value
#define SC_CCI_CMD_GET_LONG_VALUE                SC_CCI_PREFIX"GetLongValue(%d)\n"

// set a specific string value
#define SC_CCI_CMD_SET_STRING_VALUE              SC_CCI_PREFIX"SetStringValue(%d, \"%s\")\n"

// get a specific string value
#define SC_CCI_CMD_GET_STRING_VALUE              SC_CCI_PREFIX"GetStringValue(%d)\n"

// set a specific string and a corresponding long value
#define SC_CCI_CMD_SET_STRING_LONG_VALUE         SC_CCI_PREFIX"SetStringLongValue(%d, \"%s\", %d)\n"

// set a specific string and a corresponding double value
#define SC_CCI_CMD_SET_STRING_DOUBLE_VALUE       SC_CCI_PREFIX"SetStringDoubleValue(%d, \"%s\", %f)\n"

// get a specific string from a corresponding double value
#define SC_CCI_CMD_GET_STRING_DOUBLE_VALUE       SC_CCI_PREFIX"GetStringDoubleValue(%d, \"%s\")\n"

// get a specific string value for a specific purpose using an additional attribute
#define SC_CCI_CMD_GET_ID_STRING_DATA            SC_CCI_PREFIX"GetIDStringData(%d, %d)\n"

// get a specific string value for a specific purpose using an additional attribute
#define SC_CCI_CMD_SET_ID_STRING_DATA            SC_CCI_PREFIX"SetIDStringData(%d, %d, \"%s\")\n"

//Scanner auto-calibration functionality, turn auto calibration mode off
#define SC_CCI_CMD_AUTO_COMPENSATE_OFF           SC_CCI_PREFIX"AutoCompensateOff()\n"

//Scanner auto-calibration functionality, turn auto calibration mode on
#define SC_CCI_CMD_AUTO_COMPENSATE_REF           SC_CCI_PREFIX"AutoCompensateRef()\n"

//Scanner auto-calibration functionality, recalibrate scanner
#define SC_CCI_CMD_AUTO_COMPENSATE_CAL           SC_CCI_PREFIX"AutoCompensateCal()\n"

// scale the complete optical matrix
#define SC_CCI_CMD_OPTIC_MATRIX_SCALE           SC_CCI_PREFIX"OpticMatrixScale(%f, %f)\n"

// stop motion 
#define SC_CCI_CMD_MOTION_STOP_MOVE				SC_CCI_PREFIX"MotionStopMove()\n"

// motion home command 
#define SC_CCI_CMD_MOTION_HOME					SC_CCI_PREFIX"MotionHome()\n"

// motion go command 
#define SC_CCI_CMD_MOTION_GO					SC_CCI_PREFIX"MotionGo()\n"

// motion send string 
#define SC_CCI_CMD_MOTION_SEND_STRING			SC_CCI_PREFIX"MotionSendString()\n"

// update motion pos 
#define SC_CCI_CMD_MOTION_UPDATE_POS			SC_CCI_PREFIX"MotionUpdatePos()\n"

// set pixel map for pen
#define SC_CCI_CMD_SET_PIXEL_MAP_FOR_PEN        SC_CCI_PREFIX"SetPixelMapForPen(%d, %d, %d, %d, %d, %d, %d)\n"

// set mode
#define SC_CCI_CMD_SET_MODE                       SC_CCI_PREFIX"SetMode(%d)\n"

// get mode
#define SC_CCI_CMD_GET_MODE                       SC_CCI_PREFIX"GetMode()\n"

// end of command defines ===============================================================

#endif